N = int(input())
Als = list(enumerate(list(map(int, input().split()))))#これで(index,value)
dp = [[0]*(N+2) for i in range(N+2)]
ans = 0
Bls = sorted(Als,key=lambda tup:-tup[1])
dp[0][0] = 0
dp[1][0] = Bls[0][1]*(N-(Bls[0][0]+1))
dp[0][1] = Bls[0][1]*(Bls[0][0]+1 - 1)
dp[1][1] = max(dp[1][0]+Bls[1][1]*(Bls[1][1]+1 -1),dp[0][1]+Bls[1][1]*(N -(Bls[1][0]+1)))
Bls.append((N,0))
for sum in range(1,N+1):#x+yの総和がもう決まってる和
    v = Bls[sum][1]#このループで試す対象を取り出しとく　和が１まで決まってるから２番目のを取り出す
    ind = Bls[sum][0]+1
    for i in range(sum+1):#iがx側でjがy側
        j = sum-i
        if j==0:
            ne = N-i
            a = ne - ind
            dp[i+1][0] = dp[i][0]+a*v
        elif i==0:
            ns = j+1
            b = ind - ns
            dp[0][j+1] = dp[0][j]+b*v
        if j !=0:
            ne = N - i#かかるdpの状態に応じて次の位置を決める
            a = ne - ind
            ns = j
            b = ind - ns
            dp[i+1][j] = max(dp[i][j]+a*v,dp[i+1][j-1]+b*v)
        ans = max(ans, dp[i][j])
print(ans)

