#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
#define N 100
int stack[N];
int top = -1;
void push(int data)
{
stack[++top] = data;
}
int pop()
{
return stack[top--];
}
*/
/*
int main()
{
int pole=0,sum=0;
char a[100001];
gets(a);
for(int i=0;i<strlen(a);i++)
{
if(a[i]!='(' && a[i]!=')') break;
if(a[i]=='(') pole++;
else
{
pole--;
if(a[i-1]=='(')
sum+=pole;
else
sum+=1;
}
}
printf("%d", sum);
}
*/
/*
int memo[201]={};
int fib(int n)
{
if(memo[n]!=0) return memo[n];
if(n==1||n==2) return memo[n]=1;
return memo[n]=(fib(n-1)+fib(n-2))%10009;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",fib(n));
return 0;
}
*/
/*
int memo[51][51]={};
int fascal(int x,int y)
{
if(memo[x][y]!=0) return memo[x][y];
if(x==1 || y==1) return memo[x][y]=1;
return memo[x][y]=(fascal(x-1,y)+fascal(x,y-1))%100000000;
}
int main()
{
int x,y;
scanf("%d %d", &x,&y);
printf("%d", fascal(x,y));
return 0;
}
*/
/*
int memo[100001]={1,1,2};
int stair(int n)
{
if(memo[n]!=0) return memo[n];
if(n==1) return 1;
else
return memo[n]=(stair(n-1)+stair(n-2)+stair(n-3)) % 1000;
}
int main()
{
int n;
scanf("%d", &n);
printf("%d", stair(n));
return 0;
}
*/
int memo[301]={};
int arr[301]={};
int max(int a,int b)
{
return a>b ? a:b;
}
int f(int n)
{
if(memo[n]!=0) return memo[n];
if(n==1) return memo[1]=arr[1];
if(n==2) return memo[2]=arr[1]+arr[2];
if(n==3) return memo[3]=max(arr[1], arr[2])+arr[3];
else
return memo[n]=max(f(n-3)+arr[n-1], f(n-2))+arr[n];
}
int main()
{
int n;
scanf("%d", &n);
for(int i=1;i<=n;i++)
scanf("%d", &arr[i]);
printf("%d", f(n));
return 0;
}