How to get CPU usage for more than 2 cores?

I suspect that what you are really asking is "How do I count the number of cores?". This code will count the number of cores, and then create performance counters based on that.

int coreCount = 0;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
{
    coreCount += int.Parse(item["NumberOfCores"].ToString());
}

PerformanceCounter[] pc = new PerformanceCounter[coreCount];

for (int i = 0; i < coreCount; i++)
{
    pc[i] = new PerformanceCounter("Processor", "% Processor Time", i.ToString());
    Console.WriteLine(pc[i].CounterName);
}

I havent used PerformanceCounter before but is there something wrong with doing this?

PerformanceCounter pc0 = new PerformanceCounter("Processor", "% Processor Time", "0");
PerformanceCounter pc1 = new PerformanceCounter("Processor", "% Processor Time", "1");
PerformanceCounter pc2 = new PerformanceCounter("Processor", "% Processor Time", "2");
PerformanceCounter pc3 = new PerformanceCounter("Processor", "% Processor Time", "3");

This might be an old question, but for anyone else looking for a different solution, why don't you use System.Environment?

public static List<System.Diagnostics.PerformanceCounter> GetPerformanceCounters()
{
    List<System.Diagnostics.PerformanceCounter> performanceCounters = new List<System.Diagnostics.PerformanceCounter>();
    int procCount = System.Environment.ProcessorCount;
    for (int i = 0; i < procCount; i++)
    {
        System.Diagnostics.PerformanceCounter pc = new System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", i.ToString());
        performanceCounters.Add(pc);
    }
    return performanceCounters;
}

EDIT: I noticed this only returns the amount of logical processors, not the actual core count.