#include <bits/stdc++.h>
using namespace std;
template <typename T>
T sqr(const T &a) {
  return a * a;
}
const int maxn = 2e5 + 10;
struct point {
  long long x, y;
  static point orth(const point &a) { return {a.y, -a.x}; }
};
point operator-(const point &a, const point &b) {
  return {a.x - b.x, a.y - b.y};
}
long long operator^(const point &a, const point &b) {
  return a.x * b.y - a.y * b.x;
}
long long operator*(const point &a, const point &b) {
  return a.x * b.x + a.y * b.y;
}
vector<point> st;
long long a[maxn], s[maxn], d[maxn];
void add(const point &a) {
  while ((int)st.size() > 1 &&
         ((st[(int)st.size() - 1] - a) ^ (st[(int)st.size() - 2] - a)) <= 0) {
    st.pop_back();
  }
  st.push_back(a);
}
long long getMin(const point &a) {
  point b = point::orth(a);
  int l = -1, r = (int)st.size() - 1;
  while (r > l + 1) {
    int m = l + r >> 1;
    if ((b ^ (st[m + 1] - st[m])) >= 0)
      r = m;
    else
      l = m;
  }
  return st[r] * a;
}
int main() {
  ios_base::sync_with_stdio(false);
  int n;
  cin >> n;
  for (decltype(n) i = 1; i <= n; i++) {
    cin >> a[i];
    s[i] = s[i - 1] + a[i];
    d[i] = d[i - 1] + a[i] * i;
  }
  add({0, 0});
  long long dp = 0;
  for (decltype(n) i = 1; i <= n; i++) {
    dp = max(dp, d[i] - getMin({1, s[i]}));
    add({d[i] - i * s[i], i});
  }
  cout << dp << endl;
  return 0;
}
