#include #include #include #include #include #include typedef long long ll; using namespace std; int main(){ ll n; cin >> n; vector a(n, 0); ll ans = 0; for (int i = 0; i < n; ++i) cin >> a[i]; for (int k = 1; k <= n; ++k){ //cout << "k=" << k << endl; priority_queue ngo; vector frontScore; for (int i = 0; i < n; ++i){ ngo.push(a[i]); if (!((i + 1) % k)){ for (int j = 0; j < k / 2; ++j) ngo.pop(); frontScore.push_back(k*ngo.top()); ngo = priority_queue(); } } //cout << "k=" << k << endl; //for (ll t : frontScore) cout << t << " "; //cout << endl; ngo = priority_queue(); vector backScore; for (int i = 0; i < n; ++i){ ngo.push(a[n-1-i]); if (((i + 1) % k) == 0){ //cout << i << endl; for (int j = 0; j < k / 2; ++j) ngo.pop(); backScore.push_back(k*ngo.top()); ngo = priority_queue(); } } /*for (ll t : frontScore) cout << t << " "; cout << endl; for (ll t : backScore) cout << t << " "; cout << endl;*/ ll t = frontScore[0]; ll tt = backScore[0]; for (int i = 1; i < frontScore.size(); ++i){ t += frontScore[i]; tt += backScore[i]; frontScore[i] = max(frontScore[i - 1], t); backScore[i] = max(backScore[i - 1], tt); } /*t = backScore[backScore.size()-1]; for (int i = backScore.size()-2; i >= 0; --i){ t += backScore[i]; backScore[i] = max(backScore[i + 1], t); }*/ t = max(frontScore[frontScore.size()-1], backScore[frontScore.size()-1]); for (int i = 0; i < frontScore.size()-1; ++i){ t = max(t, frontScore[i] + backScore[backScore.size()-2-i]); }//cout << "t=" << t << endl; ans = max(ans, t); } cout << ans << endl; return 0; }