#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <sstream>
#include <cmath>
using namespace std;

#define MAX 100100
int n, a[MAX], mxs[MAX], mxd[MAX], ps[MAX], pd[MAX];
long long sol = 0;

int main() {
   // freopen("test.in","r",stdin);

    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }

    mxs[1] = a[1];
    ps[1] = 1;

    for (int i = 2; i <= n; i++) {
        if (a[i] >= mxs[i-1]) {
            mxs[i] = a[i];
            ps[i] = i;
        } else {
            mxs[i] = mxs[i-1];
            ps[i] = ps[i-1];
        }
    }

    mxd[n] = a[n];
    pd[n] = n;

    for (int i = n-1; i >= 1; i--) {
        if (a[i] >= mxd[i+1]) {
            mxd[i] = a[i];
            pd[i] = i;
        } else {
            mxd[i] = mxd[i+1];
            pd[i] = pd[i+1];
        }
    }

    sol = a[1] + a[2] - (long long)floor((double)log(2-1)/log(2));

    for (int i = 1; i < n; i++) {
        sol = max(sol, (long long)mxs[i] + mxd[i+1] - (long long)floor((double)log(pd[i+1]-ps[i])/log(2)));
    }

    for (int i = 2; i <= n; i++) {
        sol = max(sol, (long long)mxs[i-1] + mxd[i] - (long long)floor((double)log(pd[i]-ps[i-1])/log(2)));
    }

    for (int i = 1; i <= n; i++) {
        for (int k = i+1; k <= i + 20 && k <= n; k++) {
                //printf("%d ", k);
            sol = max(sol, (long long)a[i] + (long long)a[k] - (long long)floor((double)log(k - i)/log(2)));
        }
    }

    cout << sol << "\n";

    return 0;

}