#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define ll long long
const int maxn=1000005;
const int inf=0x3f3f3f3f;
using namespace std;
ll dp[maxn][2],ans,n,a[maxn];
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
cin>>a[i];
//枚举要找的区间的最大数
for(int x=0; x<=30; x++)
{
for(int i=0; i<=n; i++)
dp[i][0]=0,dp[i][1]=-inf;
for(int i=1; i<=n; i++)
{
if(a[i]>x)
continue;
//不丢掉,说明小于x
dp[i][0]=max(dp[i-1][0]+a[i],0ll);
//如果==x
if(a[i]==x)
// 丢这个数 前面已经丢过一个相同的
dp[i][1]=max(dp[i-1][0],dp[i-1][1]+a[i]);
else
dp[i][1]=dp[i-1][1]+a[i];//不等于的话,就直接加上
}
for(int i=1; i<=n; i++)
ans=max(ans,dp[i][1]);
}
printf("%lld\n",ans);
return 0;
}