#include<stdio.h>
long long MIN(long long a,long long b){return a<b?a:b;}
int main(){
  long long n,i,a[100010]={};
  long long ans=0,m[100010]={1};
  scanf("%lld",&n);
  n++;
  for(i=0;i<n;i++)scanf("%lld",&a[i]);
  for(i=0;i<n;i++){//printf("%lld %lld\n",m[i],a[i]);
    if(m[i]<a[i]){
      printf("-1\n");
      return 0;
    }
    m[i]-=a[i];
    m[i+1]=MIN(m[i]*2LL,1e15);
  }
  for(i=0;i<n;i++)m[i]+=a[i];
  //for(i=0;i<n;i++)printf("%lld ",m[i]);printf("\n");
  for(i=n;i--;){
    a[i]=MIN(m[i],a[i]+a[i+1]);
    ans+=a[i];
  }
  printf("%lld\n",ans);
  return 0;
}
		       
	
