#include <iostream>
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
struct Line {
mutable ll k, m, p;
bool operator<(const Line& o) const { return k < o.k; }
bool operator<(ll x) const { return p < x; }
};
struct HullDynamic : multiset<Line, less<>> {
// (for doubles, use inf = 1/.0, div(a,b) = a/b)
const ll inf = 2e18;
ll div(ll a, ll b) { // floored division
return a / b - ((a ^ b) < 0 && a % b); }
bool isect(iterator x, iterator y) {
if (y == end()) { x->p = inf; return false; }
if (x->k == y->k) x->p = x->m > y->m ? inf : -inf;
else x->p = div(y->m - x->m, x->k - y->k);
return x->p >= y->p;
}
void add(ll k, ll m) {
auto z = insert({k, m, 0}), y = z++, x = y;
while (isect(y, z)) z = erase(z);
if (x != begin() && isect(--x, y)) isect(x, y = erase(y));
while ((y = x) != begin() && (--x)->p >= y->p)
isect(x, erase(y));
}
ll query(ll x) {
assert(!empty());
auto l = *lower_bound(x);
return l.k * x + l.m;
}
};
const int N = 2e5 + 5;
ll dp[N];
ll n;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin>>n;
vector<ll>a(n + 1);
for(int i = 1;i<=n;i++) cin>>a[i];
vector<ll>pref(n + 1,0ll);
for(int i = 1;i<=n;i++) pref[i] = pref[i - 1] + a[i];
vector<ll>c(n + 1, 0ll);
for(ll i = 1ll; i<=n;i++) c[i] = c[i - 1] + (a[i]*i);
HullDynamic cht;
dp[0] = 0ll;
dp[1] = a[1];
cht.add(0ll, 0ll);
for(ll i = 2;i<=n;i++){
dp[i] = cht.query(pref[i]);
dp[i] += c[i];
cht.add(1ll - i, (i- 1ll)*pref[i- 1] - c[i-1]);
}
ll ans = 0ll;
for(int i = 0; i<=n;i++) ans = max(ans, dp[i]);
cout<<ans<<'\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdHlwZWRlZiBsb25nIGxvbmcgbGw7Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IExpbmUgewogICAgbXV0YWJsZSBsbCBrLCBtLCBwOwogICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgTGluZSYgbykgY29uc3QgeyByZXR1cm4gayA8IG8uazsgfQogICAgYm9vbCBvcGVyYXRvcjwobGwgeCkgY29uc3QgeyByZXR1cm4gcCA8IHg7IH0KfTsKIApzdHJ1Y3QgSHVsbER5bmFtaWMgOiBtdWx0aXNldDxMaW5lLCBsZXNzPD4+IHsKICAgIC8vIChmb3IgZG91YmxlcywgdXNlIGluZiA9IDEvLjAsIGRpdihhLGIpID0gYS9iKQogICAgY29uc3QgbGwgaW5mID0gMmUxODsKICAgIGxsIGRpdihsbCBhLCBsbCBiKSB7IC8vIGZsb29yZWQgZGl2aXNpb24KICAgICAgICByZXR1cm4gYSAvIGIgLSAoKGEgXiBiKSA8IDAgJiYgYSAlIGIpOyB9CiAgICBib29sIGlzZWN0KGl0ZXJhdG9yIHgsIGl0ZXJhdG9yIHkpIHsKICAgICAgICBpZiAoeSA9PSBlbmQoKSkgeyB4LT5wID0gaW5mOyByZXR1cm4gZmFsc2U7IH0KICAgICAgICBpZiAoeC0+ayA9PSB5LT5rKSB4LT5wID0geC0+bSA+IHktPm0gPyBpbmYgOiAtaW5mOwogICAgICAgIGVsc2UgeC0+cCA9IGRpdih5LT5tIC0geC0+bSwgeC0+ayAtIHktPmspOwogICAgICAgIHJldHVybiB4LT5wID49IHktPnA7CiAgICB9CiAgICB2b2lkIGFkZChsbCBrLCBsbCBtKSB7CiAgICAgICAgYXV0byB6ID0gaW5zZXJ0KHtrLCBtLCAwfSksIHkgPSB6KyssIHggPSB5OwogICAgICAgIHdoaWxlIChpc2VjdCh5LCB6KSkgeiA9IGVyYXNlKHopOwogICAgICAgIGlmICh4ICE9IGJlZ2luKCkgJiYgaXNlY3QoLS14LCB5KSkgaXNlY3QoeCwgeSA9IGVyYXNlKHkpKTsKICAgICAgICB3aGlsZSAoKHkgPSB4KSAhPSBiZWdpbigpICYmICgtLXgpLT5wID49IHktPnApCiAgICAgICAgICAgIGlzZWN0KHgsIGVyYXNlKHkpKTsKICAgIH0KICAgIGxsIHF1ZXJ5KGxsIHgpIHsKICAgICAgICBhc3NlcnQoIWVtcHR5KCkpOwogICAgICAgIGF1dG8gbCA9ICpsb3dlcl9ib3VuZCh4KTsKICAgICAgICByZXR1cm4gbC5rICogeCArIGwubTsKICAgIH0KfTsKY29uc3QgaW50IE4gPSAyZTUgKyA1OwpsbCBkcFtOXTsKbGwgbjsgCmludCBtYWluKCkgewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKCWNpbj4+bjsKCXZlY3RvcjxsbD5hKG4gKyAxKTsKCWZvcihpbnQgaSA9IDE7aTw9bjtpKyspIGNpbj4+YVtpXTsKCXZlY3RvcjxsbD5wcmVmKG4gKyAxLDBsbCk7Cglmb3IoaW50IGkgPSAxO2k8PW47aSsrKSBwcmVmW2ldID0gcHJlZltpIC0gMV0gKyBhW2ldOwoJdmVjdG9yPGxsPmMobiArIDEsIDBsbCk7IAoJZm9yKGxsIGkgPSAxbGw7IGk8PW47aSsrKSBjW2ldID0gY1tpIC0gMV0gKyAoYVtpXSppKTsKCQoJSHVsbER5bmFtaWMgY2h0OyAKICAgIGRwWzBdID0gMGxsOyAKICAgIGRwWzFdID0gYVsxXTsgCiAgICBjaHQuYWRkKDBsbCwgMGxsKTsgCgoJZm9yKGxsIGkgPSAyO2k8PW47aSsrKXsKCQlkcFtpXSA9IGNodC5xdWVyeShwcmVmW2ldKTsKICAgICAgICBkcFtpXSArPSBjW2ldOyAKICAgICAgICBjaHQuYWRkKDFsbCAtIGksIChpLSAxbGwpKnByZWZbaS0gMV0gLSBjW2ktMV0pOyAKCQkKICAgIH0KICAgIGxsIGFucyA9IDBsbDsgCiAgICBmb3IoaW50IGkgPSAwOyBpPD1uO2krKykgYW5zID0gbWF4KGFucywgZHBbaV0pOyAKICAgIGNvdXQ8PGFuczw8J1xuJzsgCgkKCQp9