#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[101];
int main(){
	int n;
	cin>>n;
	ll res=0;
    priority_queue<ll>q;
	for(int i=1;i<=n;i++) {
        cin>>a[i];
        q.push(a[i]);
    }
    
	for(int i=35;i>=0;i--){
		ll c=q.top();
        if((1ll<<i)<=c){
            if((1ll<<i+1)<=c) {
                res+=(1<<i+1)-1;
                break;
            } 
            res+=1<<i;
            q.pop();
            c-=1ll<<i;
            q.push(c);
        }
	}	
	cout<<res;
	return 0;
}

维护一个大根堆

性质:如果当前位不是当前数的最高位,说明其他当前位和低位均可取1 否则取到当前位,然后把去除之后的数压入队列