#include <bits/stdc++.h>
using namespace std;
constexpr long long MOD = 1e9 + 7;
template <typename T>
using pq = priority_queue<T>;
template <typename T>
using pqr = priority_queue<T, vector<T>, greater<T>>;
const long long INF = LLONG_MAX / 2;
using P = pair<long long, long long>;
using vec = vector<long long>;
template <typename T>
using mat = vector<vector<T>>;
template <typename T1, typename T2>
ostream& operator<<(ostream& stream, const pair<T1, T2>& p) {
  return stream << p.first << "," << p.second;
}
template <typename T>
void print(const vector<T> vec) {
  for (long long i = (0); i <= static_cast<long long>(vec.size() - 1 - 1); i++)
    cout << vec[i] << ' ';
  cout << vec[vec.size() - 1] << '\n';
}
template <typename Arg>
void print(const Arg arg) {
  cout << arg << '\n';
}
template <typename Head, typename... Args>
void print(const Head head, const Args... args) {
  cout << head << " ";
  print(args...);
}
template <typename T, typename U>
void init(vector<T>& v, vector<U>& w) {
  for (long long i = (0); i <= static_cast<long long>(v.size() - 1); i++)
    cin >> v[i] >> w[i];
}
template <typename T>
void init(vector<T>& v) {
  for (long long i = (0); i <= static_cast<long long>(v.size() - 1); i++)
    cin >> v[i];
}
template <typename T>
T sum_(vector<T> vec, T init = 0) {
  return std::accumulate((vec).begin(), (vec).end(), T(init));
}
template <typename T>
bool chmax(T& a, const T& b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
bool chmin(T& a, const T& b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
long long index(const T& vec, const typename T::iterator it) {
  return distance(vec.begin(), it);
}
template <typename T = long long>
mat<T> mmat(long long n, long long m = 0) {
  return mat<T>(n, vector<T>(m));
}
template <typename T = long long>
vector<T> ivec(long long n) {
  vector<T> v(n);
  init(v);
  return v;
}
void yn(bool tf) { print(tf ? "Yes" : "No"); }
void YN(bool tf) { print(tf ? "YES" : "NO"); }
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
signed main() {
  cin.tie(0), cout.tie(0), ios::sync_with_stdio(false);
  long long n;
  cin >> n;
  vec a = ivec(n);
  mat<long long> table = mmat<long long>(n, n);
  mat<bool> used = mmat<bool>(n, n);
  for (long long i = (0); i <= static_cast<long long>(n - 1); i++)
    for (long long j = (0); j <= static_cast<long long>(n - 1); j++)
      table[i][j] = a[i] * abs(i - j);
  long long ans = 0;
  while (true) {
    long long xx, yy;
    long long max_value = -1;
    for (long long i = (0); i <= static_cast<long long>(n - 1); i++)
      for (long long j = (0); j <= static_cast<long long>(n - 1); j++)
        if (not used[i][j]) {
          if (table[i][j] > max_value) {
            xx = i;
            yy = j;
            max_value = table[i][j];
          }
        }
    ans += max_value;
    for (long long i = (0); i <= static_cast<long long>(n - 1); i++)
      used[i][yy] = true;
    for (long long i = (0); i <= static_cast<long long>(n - 1); i++)
      used[xx][i] = true;
    bool left = false;
    for (long long i = (0); i <= static_cast<long long>(n - 1); i++)
      for (long long j = (0); j <= static_cast<long long>(n - 1); j++)
        if (not used[i][j]) {
          left = true;
          break;
        }
    if (not left) break;
  }
  print(ans);
  return 0;
}
