#include<iostream>
#include<algorithm>
using namespace std;

#define MAX_N 3000
long long n;
long long dp[MAX_N][MAX_N];
long long a[MAX_N];
long long minx;

long long solve(){
	long long res,X,Y,SA=3;
	while(SA<=n+1){
		for(int i=0;i<n;i++){
			X=i;
			Y=(i+SA)%n;
			//X wo toru.
			if(a[(X+n-1)%n]<a[Y%n]){
				dp[(X+n-1)%n][(Y+1)%n]=max(dp[(X+n-1)%n][(Y+1)%n],dp[X][Y]+a[X%n]);
			}
			else{
				dp[(X+n-2)%n][Y%n]=max(dp[(X+n-2)%n][Y%n],dp[X][Y]+a[X%n]);
			}
			//Y wo toru.
			if(a[X%n]<a[(Y+1)%n]){
				dp[X%n][(Y+2)%n]=max(dp[X%n][(Y+2)%n],dp[X][Y]+a[Y%n]);
			}
			else{
				dp[(X+n-1)%n][(Y+1)%n]=max(dp[(X+n-1)%n][(Y+1)%n],dp[X][Y]+a[Y%n]);
			}
		}
		SA+=2;
	}
	if(n%2==1){
		for(int i=0;i<n;i++){
			minx=max(dp[i][i]+a[i],minx);
		}
	}
	else{
		for(int i=0;i<n;i++){
			minx=max(dp[i][(i+1)%n],minx);
		}
	}
	return minx;
}

int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	if(n==1){cout<<a[0]<<endl;return 0;}
	if(n==2){cout<<max(a[0],a[1])<<endl;return 0;}
	for(int i=0;i<n;i++){
		if(a[(i+1)%n]>a[(i+n-1)%n]){
			dp[(i+n-1)%n][(i+2)%n]=max(dp[(i+n-1)%n][(i+2)%n],a[i]);
		}
		else{
			dp[(i+n-2)%n][(i+1)%n]=max(dp[(i+n-2)%n][(i+1)%n],a[i]);
		}
	}
	cout<<solve()<<endl;
	return 0;
}