#include <bits/stdc++.h>
const long long INF = 1LL << 60;
const long long MOD = 1000000007;
using namespace std;
using ll = long long;
template <class S, class T>
inline bool chmax(S &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class S, class T>
inline bool chmin(S &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
inline ll msb(ll v) { return 1 << (31 - __builtin_clzll(v)); }
inline ll devc(ll x, ll y) { return (x + y - 1) / y; }
struct IoSetup {
  IoSetup() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(10);
    cerr << fixed << setprecision(10);
  }
} iosetup;
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << p.first << " " << p.second;
  return os;
}
template <typename T1, typename T2>
istream &operator>>(istream &is, pair<T1, T2> &p) {
  is >> p.first >> p.second;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  for (int i = 0; i < (int)v.size(); ++i) {
    os << v[i] << (i + 1 != v.size() ? " " : "");
  }
  return os;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (T &in : v) is >> in;
  return is;
}
template <typename T>
vector<T> cumsum(const vector<T> &X) {
  vector<T> res(X.size() + 1, 0);
  for (int i = 0; i < X.size(); ++i) res[i + 1] += res[i] + X[i];
  return res;
}
template <typename S, typename T, typename F>
pair<T, T> bisearch(S left, T right, F f) {
  while (abs(right - left) > 1) {
    T mid = (right + left) / 2;
    if (f(mid))
      right = mid;
    else
      left = mid;
  }
  return {left, right};
}
template <typename S, typename T, typename F>
double trisearch(S left, T right, F f, double precision = 1e-10) {
  double low = left, high = right;
  while (high - low > precision) {
    double mid_left = high / 3 + low * 2 / 3;
    double mid_right = high * 2 / 3 + low / 3;
    if (f(mid_left) >= f(mid_right))
      low = mid_left;
    else
      high = mid_right;
  }
  return high;
}
int main() {
  ll N;
  cin >> N;
  vector<pair<ll, ll>> A(N);
  for (ll i = 0; i < (N); ++i) cin >> A[i].first, A[i].second = i;
  sort((A).rbegin(), (A).rend());
  vector<vector<ll>> f(N + 1, vector<ll>(N + 1, 0));
  ll ans = 0;
  for (ll x = 0; x < (N + 1); ++x)
    for (ll y = 0; y < (N + 1); ++y)
      if (x + y >= 1 and x + y <= N) {
        auto [val, idx] = A[x + y - 1];
        if (y) chmax(f[x][y], f[x][y - 1] + val * abs(N - y - idx));
        if (x) chmax(f[x][y], f[y][x - 1] + val * abs(x - 1 - idx));
        if (x + y == N) chmax(ans, f[x][y]);
      }
  cout << (ans) << '\n';
  return 0;
}
