Is this program O(n^2logn) or O(nlog^2(n))? I was wondering whether this program (I'm using a C syntax, hope it's not an issue) is to be considered $O(n^2 \log(n))$ or $O(n\log^2(n))$ or something else entirely.

for(int i=0;i&lt;n;i++)
    for(int j=i; j&gt;0; j/=2)
        for(int k=j; k&gt;0; k--)
            printf("Hello, World!\n");


I mean, the innermost loop is for sure $O(n)$ but maybe it could have a tighter asymptotic upper bound? It executes a number of times that is dependent on a logarithmically decreasing value (j), so I'm not really sure how would I have to think about such a scenario.
The complexity is $O(n^2)$. The reason is that the two inner loops take $O(n)$ time. The first iteration takes $i$ operations, then $i/2$, then $i/4$ until it's 0. So we need to compute the sum of $i+i/2+i/4+...+1$ operations which its upper bounded to $2i$. Finally because your outer loop is clearly $O(n)$ the total complexity is $O(n^2)$.