The format string doesn't have anything to do with it. Your integer operations are discarding any remainder.
3920139012 / 1024 / 1024 / 1024 // 3
Specify decimals using the m
suffix like so:
3920139012 / 1024m / 1024m / 1024m // 3.6509139575064182281494140625
Alternatively:
3920139012 / Math.Pow(1024, 3) // 3.65091395750642
This might be a little more clear:
var gb = Math.Pow(1024, 3);
foreach(var drive in DriveInfo.GetDrives())
{
if(drive.IsReady)
{
Console.WriteLine("Drive {0} - Has free space of {1:n2} GB",
drive.Name,
drive.TotalFreeSpace / gb);
}
}