#include <bits/stdc++.h>
using namespace std;
int q;
map<pair<long long, long long>, long long> cost;
int depth(long long x) {
  int ret = 0;
  long long y = 1;
  while (y < x) {
    y = y * 2 + 1;
    ret++;
  }
  return ret;
}
long long lca(long long a, long long b) {
  if (a > b) swap(a, b);
  int da = depth(a), db = depth(b);
  while (db > da) {
    b >>= 1;
    db--;
  }
  while (a != b) {
    a >>= 1;
    b >>= 1;
  }
  return a;
}
void update(long long a, long long b, int v) {
  while (a != b) {
    cost[{a, a >> 1}] += v;
    a >>= 1;
  }
}
long long query(long long a, long long b) {
  long long ret = 0ll;
  while (a != b) {
    ret += cost[{a, a >> 1}];
    a >>= 1;
  }
  return ret;
}
int main() {
  scanf("%d", &q);
  int id, v;
  long long a, b, c;
  for (int i = 0; i < q; i++) {
    scanf("%d %lld %lld", &id, &a, &b);
    c = lca(a, b);
    if (id == 1) {
      scanf("%d", &v);
      update(a, c, v);
      update(b, c, v);
    } else {
      printf("%lld\n", query(a, c) + query(b, c));
    }
  }
  return 0;
}
