#include <iostream>
#include <utility>
#include <cmath>
#include <vector>
#include <array>
using namespace std;

using ll = long long;
constexpr ll maxniv = 21;

class rmq{
	ll n;
	vector<array<ll, maxniv>> d;
public:
	rmq(const vector<ll>& v): n(v.size()), d(n){
		for(ll i = 0; i < n; ++i){
			d[i][0] = v[i]; }
		for(ll niv = 1, step = 1; niv < maxniv; ++niv, step *= 2){
			for(ll i = 0, j = step; j < n; ++i, ++j){
				d[i][niv] = max(d[i][niv-1], d[j][niv-1]); } } }
	ll operator()(const ll a, const ll b){
		const ll dist = b-a+1, niv = log2(dist), step = 1<<niv;
		return max(d[a][niv], d[b-step+1][niv]); } };

int main(){
	ll n;
	cin >> n;

	vector<ll> v(n, 0);
	for(auto& x : v){
		cin >> x; }
	rmq r(v);

	ll rez = v[0] + v[1];

	for(ll niv = 0; niv < maxniv; ++niv){
		for(ll i = 0, j = (2ll<<niv)-1ll; j < n; ++i, ++j){
			rez = max(rez, v[i] + r(i+1, j) - niv); } }

	cout << rez << endl;

	return 0; }