 // AtCoder.cpp : このファイルには 'main' 関数が含まれています。プログラム実行の開始と終了がそこで行われます。
//

#ifndef ONLINE_JUDGE ///???

#endif ///????
#define _USE_MATH_DEFINES

#include<math.h>
#include<deque>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<set>
#include<cmath>
#include<tuple>
#include<string>
#include<chrono>
#include<functional>
#include<iterator>
#include<random>
#include<unordered_set>
#include<array>
#include<map>
#include<iomanip>
#include<assert.h>
#include<bitset>
#include<stack>
#include<memory>
#include <sstream>
#pragma GCC optimize("Ofast") //???


using namespace std;
typedef long long ll;
#define rad_to_deg(rad) (((rad)/2/M_PI)*360)
#define EPS (1e-7)
#define INF (1e9)
#define PI (acos(-1))
#define rep(i,n) for(ll i=0;i<n;i++)
#define show(s) cout<<s<<endl
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
#define LINF (1LL << 50)
#define MOD (1e9+7)
#define rrep(i,n) for(int i=n-1;i>=0;--i)

typedef pair < ll, ll> P;

//元がintの分けたものを返す p[0]は1桁目
vector<int> divnum(ll num) {
	int dig;
	vector<int>p;
	while (num) {
		dig = num % 10;
		p.push_back(dig);
		num /= 10;
	}
	return p;
}
//桁数を返す
int digiter(ll num) {
	int dig;
	vector<int>p;
	while (num) {
		dig = num % 10;
		p.push_back(dig);
		num /= 10;
	}
	return p.size();
}
//元がstringの分けたものを返す d[0]は最高位
vector<int> convertstring(string s) {
	vector<int> d;
	ll n = s.size();
	reverse(s.begin(), s.end());
	rep(i, n) {
		d.push_back(s[i] - '0');
	}
	return d;
} 

// 1-indexedなので注意。(先頭が1から始まる) O(log N) (Nは要素数)
struct BIT {
private:
	vector<int> bit;
	int N;
public:
	BIT(int size) {
		N = size;
		bit.resize(N + 1);
	}

	// 一点更新です
	void add(int a, int w) {//a番目にwを加算
		for (int x = a; x <= N; x += x & -x) bit[x] += w;
	}

	// 1~a(以下)までの和を求める。[1,a]
	int sum(int a) {
		int ret = 0;
		for (int x = a; x > 0; x -= x & -x) ret += bit[x];
		return ret;
	}
};



/*long double　は%Lf*/
//queue古い順,stack新しい順
int N; P A[3000005]; ll cnt[3000005],res[3000005];
int32_t main() {
	cin >> N;
	rep(i, N) {
		int a;
		cin >> a;
		A[i] = P(a, i+1);
	}
	sort(A, A + N);
	BIT bit(N+5);
	
	rep(i, N) {
		int sum = bit.sum(A[i].second);
		cnt[A[i].first]=A[i].second - 1 - sum;
		bit.add(A[i].second,1);
		res[0]+=(cnt[A[i].first]);
	}
	rep(i, N) {
		swap(A[i].first, A[i].second);
	}
	sort(A, A + N);
	rep(i, N) {
		res[i+1] = res[i]+N-A[i].second-1LL-A[i].second;
	}
	rep(i, N) {
		cout << res[i] << endl;
	}
	

}
#include <bits/stdc++.h>
using namespace std;
#define BUFF ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define rep(i,a,n) for(int i=a;i<=n;++i)
#define per(i,n,a) for(int i=n;i>=a;--i)
#define ll long long
inline ll read(){ll f=1;ll x=0;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f; }
inline ll quick_pow(ll a,ll b,ll mod) {ll ans=1,base=a;while(b){if(b&1)ans=ans*base%mod;base=base*base%mod;b>>=1;}return ans%mod;}
inline ll inv(ll x,ll p){return quick_pow(x,p-2,p);}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll lcm(ll a,ll b){return a*b/gcd(a,b);}
const double pi=acos(-1.0);
const ll inf = LONG_LONG_MAX;
const ll mod = 1e9+7;
const ll maxn = 1e4 + 10;
ll a[maxn];

int main()
{
    ll n;
    n = read();
    rep(i,1,n)
    {
        a[i] = read();
    }
    ll ans = 0;
    for (int i = 1;i <= n;i++)
    {
        ll minn = a[i];
        for (int j = i; j <= n;j++)
        {
            minn = min(minn, a[j]);
            ans = max(ans, minn * (j - i + 1));
        }
    }
    cout << ans << endl;
    return 0;
}
