It depends. Let's imagine forA, and forB are expressions that evaluate to futures of Ints. This runs them in serial:
for {
a <- forA
b <- forB
} yield a + b
This runs them in parallel: val fa: Future[Int] = forA
val fb: Future[Int] = forB
for {
a <- fa
b <- fb
} yield a + b
(I dropped forC from your example as it has a dependency on the result for forA, and thus can't run in parallel.)