#define _CRT_SECURE_NO_WARNINGS
#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
typedef long long ll;
struct node
{
    int l, r;
    ll num;
} s[maxn];
ll a[maxn];
ll sum[maxn];
ll ans;
int ans_l, ans_r;
void update(int top)
{
    int l = s[top].l, r = s[top].r;
    if ((sum[r] - sum[l - 1]) * s[top].num > ans)
    {
        ans = (sum[r] - sum[l - 1]) * s[top].num;
        ans_l = l;
        ans_r = r;
    }
    if (top > 0)
        s[top - 1].r = s[top].r;
}
ll main2(int n)
{
    ans = -1;
    int top = -1;
    sum[0] = 0;
    for (int i = 1; i <= n; i++)
    {
        //scanf("%lld", &a[i]);
        sum[i] = sum[i - 1] + a[i];
    }
    for (int i = 1; i <= n; i++)
    {
        node v = {i, i, a[i]};
        while (top != -1 && s[top].num >= a[i])
        {
            update(top);
            v.l = s[top].l;
            top--;
        }
        s[++top].l = v.l;
        s[top].r = v.r;
        s[top].num = v.num;
    }
    while (top != -1)
    {
        update(top);
        top--;
    }
    if (1)
    {
        printf("checkseq:");
        for (int i = 1; i <= n; i++)
            printf("%d ", a[i]);
        printf("\nres: %lld\n", ans);
    }
    return ans;
}
int a2[maxn];
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", a2 + i);
    ll ans = 0;
    int last = 0;
    for (int i = 1; i <= n; i++)
    {
        if (1ll * a2[i] * a2[i - 1] < 0)
        {
            for (int j = 1; j <= (i - last); j++) a[j] = abs(a2[last + j - 1]);
            ans = max(ans, main2(i - last));
            last = i;
        }
    }
    for (int j = 1; j <= (n - last); j++) a[j] = abs(a2[last + j - 1]);
    ans = max(ans, main2(n - last));
    printf("%lld", ans);
    return 0;
}