#include<bits/stdc++.h>

using namespace std;

struct s{
    int sum,xs;
    int lsum,rsum,x1,x2;
    int maxarr;
} tree[300000]={0};
void merge(int ind)
{
    s l,r;
    l= tree[2*ind+1];
    r= tree[2*ind+2];
    
   int a= max(l.lsum*l.x1,(l.sum+r.lsum)*(l.xs+r.x1));
    if(a==l.sum*l.x1)
    {
        tree[ind].lsum= l.lsum;
        tree[ind].x1= l.x1;
    }
    else {tree[ind].lsum= l.sum+r.lsum;
    tree[ind].x1=(l.xs+r.x1);
    }
    
    int b= max(r.rsum*r.x2,(l.rsum+r.sum)*(r.xs+l.x2));
    if(b==r.rsum*r.x2)
    {
        tree[ind].rsum= r.rsum;
        tree[ind].x2= r.x2;
    }
    else{
        tree[ind].rsum= l.rsum+ r.sum;
        tree[ind].x2= r.xs+l.x2;
    }
    
    tree[ind].sum= l.sum+r.sum;
    tree[ind].xs= l.xs+r.xs;
    
    tree[ind].maxarr= max(tree[2*ind+1].maxarr,max(tree[2*ind+2].maxarr,(l.rsum+r.lsum)*(l.x2+r.x1)));
    
}
void build(int st,int en,int ind,int *arr)
{
    int mid= (st+en)/2;
    if(st==en)
    {
        tree[ind].maxarr=tree[ind].rsum=tree[ind].lsum=tree[ind].sum= arr[st];
        tree[ind].x1=tree[ind].x2=tree[ind].xs=1;
        return;
    }
    build(st,mid,2*ind+1,arr);
    build(mid+1,en,2*ind+2,arr);
    merge(ind);
}
int main()
{
    int n;
    cin>>n;
    int arr[100000];
    for(int i=0;i<n;i++)cin>>arr[i];
    build(0,n-1,0,arr);
    //for(int i=0;i<2*n-1;i++)cout<<tree[i].maxarr<<" ";cout<<endl;
    cout<<tree[0].maxarr<<endl;
    return 0;
}
