/***************************************************
 * Alex Palcuie
 * Romania - 2016
 * alex [dot] palcuie [at] gmail [dot] com
 * http://blog.palcu.ro/
****************************************************/

#include <algorithm>
#include <bitset>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <fstream>
#include <iostream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using namespace std;

const int N = 1<<10;
const int INF = 0x3f3f3f3f;

vector<pair<int, int>> v;

inline int calc(int a, int b) {
    return v[a].first + v[b].first - floor(log2(max(v[a].second, v[b].second) - min(v[a].second, v[b].second)));
}

int main() {
    int n; cin >> n;
    for (int i=0; i<n; i++) {
        int x; cin >> x;
        v.push_back({x, i});
    }

    sort(begin(v), end(v));
    int max_len = min(1000, (int)v.size());
    int sol = calc(0, 1);
    for (int i=0; i<max_len; i++) {
        for (int j=i+1; j<max_len; j++) {
            sol = max(sol, calc(i, j));
        }
    }
    cout << sol << "\n";
    
    return 0;
}