#include <bits/stdc++.h>
using namespace std;
long long n, maximo;
long long vetor[3000];
long long aux[3000];
long long total;
void calc_max(long long cont, long long pos) {
  if (pos >= pow(2, n) - 1) {
    if (cont + vetor[pos - 1] > maximo) maximo = cont + vetor[pos - 1];
    aux[pos - 1] = cont + vetor[pos - 1];
  } else {
    calc_max(cont + vetor[pos - 1], pos * 2 + 1);
    calc_max(cont + vetor[pos - 1], pos * 2 + 2);
  }
}
long long dp(long long pos) {
  if (pos >= pow(2, n) - 1) {
    return aux[pos - 1];
  } else {
    aux[pos - 1] =
        min(dp((long long)(pos * 2 + 1)), dp((long long)(pos * 2 + 2)));
    return aux[pos - 1];
  }
}
void calc(long long pos, long long luzes, long long colocadas) {
  if (pos >= pow(2, n) - 1) {
    total += aux[pos - 1];
  } else {
    total += aux[pos - 1];
    colocadas += aux[pos - 1];
    aux[pos * 2] -= colocadas;
    aux[pos * 2 + 1] -= colocadas;
    calc(pos * 2 + 1, luzes + vetor[pos - 1] + aux[pos - 1], colocadas);
    calc(pos * 2 + 2, luzes + vetor[pos - 1] + aux[pos - 1], colocadas);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  long long tam = pow(2, n + 1) - 2;
  for (long long i = 0; i < tam; i++) cin >> vetor[i];
  maximo = 0;
  fill(aux, aux + tam + 1, INT_MAX);
  calc_max(0, 1);
  calc_max(0, 2);
  for (long long i = pow(2, n) - 1; i <= tam; i++)
    aux[i - 1] = maximo - aux[i - 1];
  dp(1);
  dp(2);
  total = 0;
  calc(1, 0, 0);
  calc(2, 0, 0);
  cout << total << endl;
}
