#include<stdio.h>
#include<deque>
using namespace std;

#define mp make_pair
const int NMAX = 1e5 + 5, INF = 2e9;

int n, val[NMAX];

int f (int p) {
    int i, sol, dmax = (1 << (p + 1)) - 1;
    deque <int> q;

    sol = -INF;
    for(i = 1; i <= n; ++ i) {
        while(!q.empty() && q.front() < i - dmax)
            q.pop_front();

        if(!q.empty())
            sol = max(sol, val[i] + val[q.front()]);
        while(!q.empty() && val[i] > val[q.back()])
            q.pop_back();

        q.push_back(i);
    }

    return sol;
}

int main() {
    int p,  ans, i;

    scanf("%d", &n);
    for(i = 1; i <= n; ++ i)
        scanf("%d", &val[i]);

    ans = -INF;
    for(p = 0; (1 << p) <= n; ++ p)
        ans = max(ans, f(p) - p);

    printf("%d\n", ans);
    return 0;
}