#include <bits/stdc++.h>
using namespace std;
int n;
long long dp[2005][2005];
vector<pair<long long,int> > v;
long long solve(int l,int r)  
//现在区间从l到r 还没有放数
{
	if (r<l) 	return 0;
	if (dp[l][r]!=-1) 	return dp[l][r];
	int i=l+n-r-1; //i 为 现在该放第 i 个数。那么它可能放在l的位置 或者 放在r的位置
	long long temp1,temp2;
	temp1 = v[i].first * abs(v[i].second-l)+ solve(l+1,r); 	//第i个数字放在l的位置
	temp2 = v[i].first * abs(v[i].second-r)+ solve(l,r-1);	//第i个数字放在r的位置
	return dp[l][r]= max(temp1,temp2);
}
int main()
{
	scanf("%d",&n);
	for (int i=0;i<n;i++)
	{
		int a;
		scanf("%d",&a);
		v.push_back({a,i});
	}
	//
	sort(v.rbegin(),v.rend());  //倒序排序
	memset(dp,-1,sizeof(dp));
	//这里有个贪心的思路，最大的数肯定尽量往两边放。
	printf("%lld",solve(0,n-1)); 
	
	
	return 0;
}
