#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long gcd(long long x, long long y) {
  if (x > y) swap(x, y);
  while (x != 0) {
    y %= x;
    swap(x, y);
  }
  return y;
}
long long mpow(long long x, long long r) {
  if (r == 0) return 1;
  if (r % 2 == 1) {
    return x * mpow(x, r - 1) % mod;
  } else {
    long long aa = mpow(x, r / 2);
    return aa * aa % mod;
  }
}
long long dp[2020][2020];
vector<pair<long long, int> > a;
int main() {
  int N;
  cin >> N;
  long long A[N];
  for (int i = 0; i < int(N); i++) {
    cin >> A[i];
    a.push_back(pair<long long, int>(A[i], i));
  }
  sort((a).begin(), (a).end(), greater<pair<long long, int> >());
  for (int i = 1; i <= N; i++) {
    for (int j = 0; j <= i; j++) {
      if (i - j > 0 && j > 0) {
        dp[i - j][j] = max(
            dp[i - j - 1][j] +
                a[i - 1].first * abs(i - j - 1 - a[i - 1].second),
            dp[i - j][j - 1] + a[i - 1].first * abs(a[i - 1].second - (N - j)));
      } else if (i - j > 0) {
        dp[i - j][j] = dp[i - j - 1][j] +
                       a[i - 1].first * abs(i - j - 1 - a[i - 1].second);
      } else {
        dp[i - j][j - 1] + a[i - 1].first* abs(a[i - 1].second - (N - j));
      }
    }
  }
  long long ans = -1;
  for (int i = 0; i < int(N + 1); i++) {
    if (ans < dp[i][N - i]) ans = dp[i][N - i];
  }
  cout << ans << endl;
  return 0;
}
