#include <bits/stdc++.h>   using namespace std;   template <class T1>   void debug(T1 e) {     cout << e << endl;   }   template <class T1, class T2>   void debug(T1 e1, T2 e2) {     cout << e1 <<   t  << e2 << endl;   }   template <class T1, class T2, class T3>   void debug(T1 e1, T2 e2, T3 e3) {     cout << e1 <<   t  << e2 <<   t  << e3 << endl;   }   template <class T1, class T2, class T3, class T4>   void debug(T1 e1, T2 e2, T3 e3, T4 e4) {     cout << e1 <<   t  << e2 <<   t  << e3 <<   t  << e4 << endl;   }   template <class T1, class T2, class T3, class T4, class T5>   void debug(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5) {     cout << e1 <<   t  << e2 <<   t  << e3 <<   t  << e4 <<   t  << e5 << endl;   }   template <class T1, class T2, class T3, class T4, class T5, class T6>   void debug(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5, T6 e6) {     cout << e1 <<   t  << e2 <<   t  << e3 <<   t  << e4 <<   t  << e5 <<   t           << e6 << endl;   }   template <class T>   void debug(vector<vector<T> > e, int row, int col) {     int i, j;     for (i = 0; i < row; i++) {       for (j = 0; j < col; j++) cout << e[i][j] <<    ;       cout << endl;     }     cout << endl;   }   template <class T>   void debug(vector<basic_string<T> > e, int row, int col) {     int i, j;     for (i = 0; i < row; i++) {       for (j = 0; j < col; j++) cout << e[i][j];       cout << endl;     }     cout << endl;   }   template <class T>   void debug(T e[110][110], int row, int col) {     int i, j;     for (i = 0; i < row; i++) {       for (j = 0; j < col; j++) cout << e[i][j] <<    ;       cout << endl;     }   }   template <class T>   string toString(T n) {     ostringstream oss;     oss << n;     oss.flush();     return oss.str();   }   int toInt(string s) {     int r = 0;     istringstream sin(s);     sin >> r;     return r;   }   bool isVowel(char ch) {     ch = tolower(ch);     if (ch ==  a  || ch ==  e  || ch ==  i  || ch ==  o  || ch ==  u )       return true;     return false;   }   bool isUpper(char c) { return c >=  A  && c <=  Z ; }   bool isLower(char c) { return c >=  a  && c <=  z ; }   int n;   int arr[2000];   int main() {     int n;     while (cin >> n) {       int i;       for (i = 1; i <= n; i++) cin >> arr[i];       if (n % 2 == 0 || n == 1) {         cout <<  -1  << endl;         continue;       }       int ans = 0;       for (i = n - 1; i > 1; i -= 2) {         int ma = max(arr[i], arr[i + 1]);         arr[i] = 0;         arr[i + 1] = 0;         arr[i / 2] -= ma;         arr[i / 2] = max(0, arr[i / 2]);         ans += ma;       }       ans += arr[1];       cout << ans << endl;     }     return 0;   }   