#include <cstring>
#include <iostream>

using namespace std;

const int N_MAX = 1e5;
const int LG_MAX = 17;
const int INF = 0xc0c0c0c0;

int N;
int a[LG_MAX][6 * N_MAX];

int main() {
   memset(a, INF, sizeof a);
   cin >> N;
   for (int i = 1; i <= N; ++i)
      cin >> a[0][i];

   for (int i = 1; i < LG_MAX; ++i)
      for (int j = 1; j <= N; ++j)
         a[i][j] = max(a[i - 1][j], a[i - 1][j + (1 << (i - 1))]);

   int ans = INF;
   for (int i = 1; i <= N; ++i)
      for (int j = 0; j < LG_MAX; ++j)
         ans = max(ans, a[0][i] - j + a[j][i + (1 << j)]);

   cout << ans << "\n";
   return 0;
}