This is an interesting calculator:
http://www.runworks.com/calculator.html
It lets you plug in all kind of factors, including uphill and downhill in a race. According to it, for a 2:12 marathoner, the course at Berlin (with basically 125’ of ascent and 125’ of descent) is 16 seconds faster than the course at Chicago (with 300’ of ascent and 300’ descent) which is 5 seconds faster than the course at CIM (750’ ascent, 1100’ of descent). It has Berlin as 12 seconds slower than a perfectly flat course, Chicago as 28 seconds slower, and CIM as 33 seconds slower.
It seems like a reasonable approximation of the course’s affects, despite not knowing exactly how many inclines and declines there are, how long and steep they are, where they come in the course, etc. That being said, differences in those factors (either not captured in the calculation or in how those different factors affect different runners differently) could doubtless have an impact of a few seconds one way or another on either of those course affects.
Not captured in any of this, though, is the affect of non-course factors (pacing, weather, competition, logistics, financial incentives), which of course can be different for elites, sub-elites, competitive AGers, mid-packers, and baxk-of-the-packers. For elites, the ARRS’s “Race Time Bias” statistic attempts to capture all factors, and from 2015-2017 (the three most recent years for which we have data from all three races) here are their averages:
Berlin: Female elites 3.9 s/km faster than expected, male elites 4.4 s/km fast (average 4.2 s/km fast)
Chicago: Female elites 3.5 s/km fast, male elites .9 s/km slower than expected (average 1.3 s/km fast)
CIM: Female elites 3.8 s/km fast, male elites 4.0 s/km fast (average 3.9 s/km fast)
So it seems like Berlin clearly has the fastest course, with Chicago and CIM clearly behind it (but pretty close to each other). And including all factors (for elites, anyway) Berlin is slightly faster than CIM, but both of those races are substantially faster than Chicago.