def METHOD_NAME(*cyclic_orders):
    """
    Returns the direct product of cyclic groups with the given orders.
    According to the structure theorem for finite abelian groups ([1]),
    every finite abelian group can be written as the direct product of
    finitely many cyclic groups.
    Examples
    ========
    >>> Permutation.print_cyclic = True
    >>> AbelianGroup(3, 4)
    PermutationGroup([
            Permutation(6)(0, 1, 2),
            Permutation(3, 4, 5, 6)])
    >>> _.is_group
    True
    See Also
    ========
    diofant.combinatorics.group_constructs.DirectProduct
    References
    ==========
    * https://groupprops.subwiki.org/wiki/Structure_theorem_for_finitely_generated_abelian_groups
    """
    groups = []
    degree = 0
    order = 1
    for size in cyclic_orders:
        degree += size
        order *= size
        groups.append(CyclicGroup(size))
    G = DirectProduct(*groups)
    G._is_abelian = True
    G._degree = degree
    G._order = order
    return G