#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
struct node {
  int fa, ch[2], sz;
  long long v, tag;
  inline int dir(int x) { return ch[1] == x; }
  inline void add(long long x) {
    v += x;
    tag += x;
  }
} t[N];
inline void setc(int x, int y, int o) {
  t[y].fa = x;
  t[x].ch[o] = y;
}
inline void upd(int x) { t[x].sz = t[t[x].ch[0]].sz + t[t[x].ch[1]].sz + 1; }
inline void down(int x) {
  if (t[x].tag)
    t[t[x].ch[0]].add(t[x].tag), t[t[x].ch[1]].add(t[x].tag), t[x].tag = 0;
}
inline void rotate(int x) {
  int y = t[x].fa, z = t[y].fa, o;
  setc(z, x, t[z].dir(y));
  o = t[y].dir(x);
  setc(y, t[x].ch[!o], o);
  setc(x, y, !o);
  upd(y);
}
inline void splay(int x) {
  for (; t[x].fa; rotate(x)) {
    int y = t[x].fa, z = t[y].fa;
    if (z) rotate(t[z].dir(y) == t[y].dir(x) ? y : x);
  }
  upd(x);
}
int n, x, i, u, o, s, ss;
long long a[N], ans;
void dfs(int x) {
  down(x);
  if (t[x].ch[0]) dfs(t[x].ch[0]);
  a[++i] = t[x].v;
  if (t[x].ch[1]) dfs(t[x].ch[1]);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  t[1].sz = 1;
  cin >> t[1].v;
  for (i = 2; i <= n; ++i) {
    cin >> x;
    s = 0;
    u = i - 1;
    for (;;) {
      ss = s + t[t[u].ch[0]].sz + 1;
      down(u);
      if (t[u].v > 1ll * x * ss)
        o = 1, s = ss;
      else
        o = 0, t[u].v += x, t[t[u].ch[1]].add(x);
      if (!t[u].ch[o]) break;
      u = t[u].ch[o];
    }
    setc(u, i, o);
    t[i].sz = 1;
    t[i].v = 1ll * (s + 1) * x;
    splay(i);
  }
  i = 0;
  dfs(n);
  for (i = 1; i <= n; ++i) ans = max(ans, a[i] += a[i - 1]);
  cout << ans << endl;
  return 0;
}
