#include using namespace std; #define FOR(i,a,b) for(int i = (a); i <= (b); ++i) #define FORD(i,a,b) for(int i = (a); i >= (b); --i) #define RI(i,n) FOR(i,1,(n)) #define REP(i,n) FOR(i,0,(n)-1) #define mini(a,b) a=min(a,b) #define maxi(a,b) a=max(a,b) #define mp make_pair #define pb push_back #define st first #define nd second #define sz(w) (int) w.size() typedef vector vi; typedef long long ll; typedef long double ld; typedef pair pii; const int inf = 2e9 + 5; const int nax = 1e5 + 5; int t[nax]; int dp[nax][20]; int main() { int n; scanf("%d", &n); RI(i, n) scanf("%d", &t[i]); int ans = -inf; REP(i, n + 2) REP(k, 20) dp[i][k] = -inf; FOR(i, 2, n) { int j = 2; dp[i][0] = t[i-1]; maxi(ans, t[i-1] + t[i]); RI(k, 20) { dp[i][k] = dp[i][k-1]; if(i - j >= 1) { maxi(dp[i][k], dp[i-j][k-1]); maxi(dp[i][k], t[i-j]); } maxi(ans, t[i] + dp[i][k] - k); j *= 2; } } printf("%d\n", ans); return 0; }