Note that values are searched in reversed order (meaning F(0), F(lenA-1), ..., F(1)) to have a simpler expression for the loop. Alternatively we could have A[:0:-1] in the loop and reverse the sum.

```
class Solution(object):
def maxRotateFunction(self, A):
"""
:type A: List[int]
:rtype: int
"""
sumA = sum(A)
lenA = len(A)
cur_max = run_sum = sum(i * e for i, e in enumerate(A))
for number in A[:-1]:
run_sum += number * lenA - sumA
cur_max = max(cur_max, run_sum)
return cur_max if A else 0
```