#include <bits/stdc++.h>
using namespace std;
vector<int> v[3 * 10000];
bool visited[1000001];
long long dp[1000001];
long long arr[1025][1025];
long long cnt = 0;
int n;
void dfs(int sv) {
  if ((int)pow(2, n) <= sv && sv <= (int)pow(2, n + 1) - 1) return;
  dfs(2 * sv);
  dfs(2 * sv + 1);
  long long a = dp[2 * sv + 1];
  long long b = dp[2 * sv];
  long long ans = max(a + arr[sv][2 * sv + 1], b + arr[sv][2 * sv]);
  cnt += max(a + arr[sv][2 * sv + 1], b + arr[sv][2 * sv]) -
         min(a + arr[sv][2 * sv + 1], b + arr[sv][2 * sv]);
  dp[sv] = ans;
}
int main() {
  cin >> n;
  int temp = (int)pow(2, n + 1) - 1;
  for (int i = 2; i < temp + 1; i++) {
    int data;
    cin >> data;
    arr[i / 2][i] = data;
  }
  dfs(1);
  cout << cnt;
  return 0;
}
