If $L_1$ and $L_2$ are recursively enumerable languages, then so is
    Let $M_1$ and $M_2$ be Turing machines such that
      L(M_1) = L_1 && L(M_2) = L_2
    A split of a word $w$ is a pair $(w_1,w_2)$ such that $w = w_1 w_2$.
    We call the split good if $M_1$ accepts $w_1$ and $M_2$ accepts $w_2$.
    Create a Turing machine $N$ that
      \item computes all splits of the input word $w$
      \item checks \emph{all splits in parallel} whether they are good
      \item accepts the input $w$ as soon as a good split is found
    Then $L(N) = L_1 L_2$.