#include <bits/stdc++.h>
using namespace std;
int N;
long long int arr[100010];
vector<long long int> values;
long long int maxs;
long long int bc[100010];
void brute(int node, int x, long long int upper) {
  upper += arr[node];
  if (x == N) {
    bc[node] = upper;
    maxs = max(maxs, upper);
    return;
  }
  brute((node << 1), x + 1, upper);
  brute(((node << 1) + 1), x + 1, upper);
  bc[node] = max(bc[(node << 1)], bc[((node << 1) + 1)]);
}
long long int ans;
void mc(int node, int x, long long int tp) {
  long long int gandu = (maxs - tp - bc[node]);
  ans += gandu;
  if (x == N) {
    return;
  }
  mc((node << 1), x + 1, tp + gandu);
  mc(((node << 1) + 1), x + 1, tp + gandu);
}
void ReadInput(void) {
  scanf("%d", &N);
  for (int i = 2; i <= (1 << (N + 1)) - 1; i++) scanf("%lld", &arr[i]);
}
void solve(void) {
  brute(1, 0, 0);
  mc(1, 0, 0);
  cout << ans << endl;
}
int main() {
  ReadInput();
  solve();
  return 0;
}
