Creo que depende de lo que quiere decir con "legible". El primer ejemplo indica claramente la lógica del programa y debe ser comprensible para cualquier persona con un fondo de programación.
Para mí, el segundo ejemplo es más intuitivo en función del contexto (es decir, está tomando una matriz (u otro tipo de colección) y está ejecutando un método denominado Suma en cada elemento de esa matriz). El único lugar donde el segundo ejemplo puede ser menos claro es en la expresión lambda propiamente dicha, especialmente para alguien que no ha tenido experiencia con lambdas o alraedy que tenga experiencia en programación funcional.
Creo que a medida que las lambdas se vuelven más frecuentes en la programación de .NET esto se convertirá en un problema menor. Tal como está, creo que hay una curva de aprendizaje muy pequeña para entender los conceptos básicos de cómo usar expresiones lambda en .NET.
¿Por qué en ForEach no se usa + = en lugar de repetir la variable? –