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

const int MAXN = 55;
int num[MAXN];  // 存储输入的数字序列
int dp[MAXN];   // 动态规划数组,dp[i]表示考虑前i个数时的最大和

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> num[i];
    }

    dp[0] = num[0];  // 初始化,只有一个数时最大和就是这个数本身
    if (n >= 2) {
        dp[1] = max(num[0], num[1]);  // 有两个数时,取较大的那个数作为最大和
    }

    for (int i = 2; i < n; ++i) {
        dp[i] = max(dp[i - 1], dp[i - 2] + num[i]);  // 状态转移方程,取两种情况的较大值
    }

    cout << dp[n - 1] << endl;  // 输出最终的最大和,注意数组下标从0开始,所以是dp[n - 1]

    return 0;
}
/**************************************************************
	Problem: 1653
	User: zhuangsongyu
	Language: C++
	Result: Accepted
	Time:22 ms
	Memory:2072 kb
****************************************************************/