#include <bits/stdc++.h>
using namespace std;
map<long long int, long long int> visit;
map<long long int, long long int> present;
vector<long long int> order;
void dfs(long long int x) {
  stack<long long int> st;
  st.push(x);
  while (!st.empty()) {
    long long int tp = st.top();
    st.pop();
    order.push_back(tp);
    if (!visit[tp]) {
      visit[tp] = 1;
    }
    long long int a = tp * 2;
    long long int b = (tp % 3 == 0 ? tp / 3 : 0);
    if (present[a]) {
      st.push(a);
    } else if (present[b]) {
      st.push(b);
    } else {
      break;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  long long int a[n];
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    present[a[i]] = 1;
  }
  sort(a, a + n);
  reverse(a, a + n);
  bool flag = false;
  for (int i = 0; i < n; i++) {
    dfs(a[i]);
    if (order.size() == n) {
      flag = true;
      break;
    } else {
      visit.clear();
      order.clear();
    }
  }
  if (flag) {
    for (int i = 0; i < order.size(); i++) {
      cout << order[i] << ' ';
    }
    cout << '\n';
  }
  return 0;
}
