#include <iostream>
#include <string.h>
#include <fstream>

using namespace std;

const int maxn = 100005;
const int maxlg = 18;

int rmq[maxlg][maxn * 10];

int main() {
    int n;
    cin >> n;
    memset(rmq, -0x3f3f3f3f, sizeof(rmq));
    for(int i = 1 ; i <= n ; ++ i)
        cin >> rmq[0][i];

    for(int i = 1 ; i < maxlg ;++ i)
        for(int j = 1 ; j <= n ; ++ j) {
            rmq[i][j] = max(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
        }

    long long ans = -0x3f3f3f3f;
        for(int i = 1 ; i < n ; ++ i) {
            for(int lg = 0 ; lg < maxlg ; ++ lg) {
               int st = i + (1 << lg);
               ans = max(ans, 1LL * rmq[0][i] + rmq[lg][st] - lg);
        }
    }
    cout << ans << '\n';
    return 0;
   }