#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; }