long long int max(long long int s1,long long int s2);
long long int back(long long int i,long long int *data,long long int n);
long long int maxAmong(long long int s1,long long int s2,long long int s3);
long long int oddback(long long int i,long long int *data,long long int n,long long int cur,long long int div);
int main(){
   long long int n,sum,div,i,res;
   long long int *data;
    scanf("%d",&n);

    data=(long long int*)malloc(sizeof(long long int)*n);

    for(i=0;i<n;i++)
        scanf("%lld",&data[i]);
    
    div=n%2;
    if(div==0)
        res=back(0,data,n);
    else
        res=oddback(0,data,n,0,n/2);
    printf("%lld\n",res);
    return 0;
}

long long int back(long long int i,long long int *data,long long int n){
    long long int sum1=0,sum2=0;
    if(i<n){
        sum1=data[i]+back(i+2,data,n);
        sum2=data[i+1]+back(i+3,data,n);
    }
    return max(sum1,sum2);
}
long long int oddback(long long int i,long long int *data,long long int n,long long int cur,long long int div){
    long long int sum1=0,sum2=0,sum3=0;
    if((i+2)<n && cur<div){
        sum1=data[i]+oddback(i+2,data,n,cur+1,div);
        sum2=data[i+1]+oddback(i+3,data,n,cur+1,div);
        sum3=data[i+2]+oddback(i+4,data,n,cur+1,div);
        return maxAmong(sum1,sum2,sum3);
    }
    else if((i+1)<n && cur<div){
        sum1=data[i]+oddback(i+2,data,n,cur+1,div);
        sum2=data[i+1]+oddback(i+3,data,n,cur+1,div);
        return max(sum1,sum2);
    }
    else if(i<n && cur<div){
        sum1=data[i]+oddback(i+2,data,n,cur+1,div);
        return sum1;
    }   
    return 0;
}
long long int maxAmong(long long int s1,long long int s2,long long int s3){
    if(s1>=s2 && s1>=s3)
        return s1;
    else if(s2>=s1 && s2>=s3)
        return s2;
    return s3;
}
long long int max(long long int s1,long long int s2){
    if(s1>s2)
        return s1;
    return s2;
}