#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <queue>
using namespace std;
#define N 2050
priority_queue<int>q;
int n,a[N],G[N][N],gg[N][N],vis[N],du[N];
int gcd(int x,int y) {return y?gcd(y,x%y):x;}
void dfs(int x) {
	vis[x]=1;
	int i;
	for(i=1;i<=n;i++) if(!vis[i]&&gg[x][i]>1) {
		dfs(i); G[x][i]=1; du[i]++;
	}
}
int main() {
	scanf("%d",&n);
	int i,j;
	for(i=1;i<=n;i++) scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	for(i=1;i<=n;i++) {
		for(j=1;j<=n;j++) {
			gg[i][j]=gcd(a[i],a[j]);
		}
	}
	for(i=1;i<=n;i++) if(!vis[i]) dfs(i);
	for(i=1;i<=n;i++) if(!du[i]) q.push(i);
	while(!q.empty()) {
		int x=q.top(); q.pop();
		printf("%d ",a[x]);
		for(i=1;i<=n;i++) if(G[x][i]) {
			du[i]--;
			if(!du[i]) q.push(i);
		}
	}
}
